perm filename GREDX.F4[NEW,LCS]22 blob sn#517365 filedate 1980-06-16 generic text, type T, neo UTF8
00100	C  SUBRS. VLINE, ASKIT, GRED, LPEN, SAVIT, LISTP ***************
00200	
00300	
00400		SUBROUTINE VLINE(R3,R4,R5,R6)
00500		INTEGER ASK
00600		COMMON /MKX/KSLA,ISEMI,LESS,IGT/A2Z/LAA,LBB,NONO(9),LEL
00700		COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /IDEV/IDEV
00800		IF(R5.NE.0)GO TO 66 
00900	267 	IF(IDEV.EQ.5)
01000		1 CALL TYPSTR('TYPE STAFF #, POS1, POS2 AND CODE #  ')
01100	CRR** NEXT WITH NEW RREAD IN MS.F4   CAN NOW TYPE M 1 0 200 16, ETC.
01200		READ(IDEV,F78F,END=167)R3,R4,R5,R6
01300	CQQ	ACCEPT F78F,R3,R4,R5,R6
01400		REREAD FA1,ASK
01500		IF(ASK.EQ.LESS)GO TO 167
01600		CALL LO2UP(ASK)
01700		IF(ASK.NE.IGT)GO TO 2
01800		IDEV=1
01900		GO TO 267
02000	2	IF(ASK.EQ.LBB)R3=99
02100	C  99 IS ALSO USED IN MOVER.F4
02200		IF(R3.GE.99)RETURN
02300		IF(ASK.NE.LEL)GO TO 66
02400	C  TYPE 'L' FOR LIGHT-PEN
02500		K=-1
02600	67	R4=RY
02700		CALL LPEN(R3,RY,RX)
02800		REREAD FA1,ASK
02900		CALL LO2UP(ASK)
03000		IF(ASK.EQ.LBB)R3=99
03100		IF(R3.GE.99)RETURN
03200		K=-K
03300		IF(K.GT.0)GO TO 67
03400		R5=RY
03500	C LIGHT PEN IS READ TWICE
03600	66	ASK=-1
03700		IF(R6.LT.100)GO TO 1
03800		R6=R6-100
03900	C  FOR 'ASK' ADD 100 TO PARAM NUMBER GIVEN.
04000		ASK=0
04100	1	CALL BOX(-1,R4)
04200		CALL BOX(-2,R5)
04300	C  PUTS UP TWO VERTICAL LINES
04400		RETURN
04500	CCC3	FORMAT(' TYPE STAFF #, POS1, POS2 AND CODE #  '$)
04600	167	IDEV=5    
04700		GO TO 267
04800		END
04900	
05000	
05100		SUBROUTINE ASKIT
05200		INTEGER ASK
05300		COMMON /DPY/ST(4000),MEDIT,IGO/A2Z/NONO(6),LGG
05400		COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK
05500		COMMON /XRN/RN(1) /KJY/ K,JY
05600		IGO=0
05700		CALL DPYNEW
05800		X=ST(2)
05900		CALL BOX(JY,RN(JY+2))
06000		ST(2)=X
06100	  	CALL TYPSTR('N=NO, <CR>=YES, G=GO  ')
06200		ACCEPT FA1,K
06300		IF(K.EQ.LGG)ASK=-1
06400		CALL DPYNEW
06500		IGO=1
06600		END
06700	
06800		SUBROUTINE GRED
06900		INTEGER PWDS
07000		COMMON /MKX/KSLA,ISEMI,LESS,IGT
07100		1/A2Z/LAA,LBB,NONO(9),LEL,LMM,LNN,NON(9),LXX
07200		COMMON /DPY/IST(4000),MEDIT,IGO /IDEV/IDEV
07300		COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /KJY/ K,JY
07400		COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND
07500		COMMON R2,JA,J,J2,RJQ(6),RC,IZ,RX,KV,RY,IA,IB,C,D,JZ,A,
07600		1 NX,VY,RB,JQ(20) /XRN/RN(1) /ALF/INP(72),ML
07700		COMMON /PTR/PWDS(1) /POSI/STFF(8),JJB,POS
07800		1 /LIMIT/LIMIT,ITEM,L,I,IX
07900		1 /RINP/R(10,80),RPOS(100) /DPTR/IWDS(1)
08000	
08100		EQUIVALENCE (IST2,IST(2))
08200		RC=999
08300		RSTF=RC
08400	CC **CAN'T GET HERE ***IF(INP(1).NE.'A'.AND.INP(1).NE.'D')GO TO 1
08500	C  LEAVES ROUTINE
08600		POS=0
08700	C ABOVE FOR NEW RREAD IN MS.
08800	7	CALL VLINE(R2,Z,POS,RX)
08900	C  PUTS UP TWO VERTICAL LINES
09000		REREAD FA1,NX
09100		CALL LO2UP(NX)
09200		IF(NX.EQ.LBB)GO TO 170
09300		IF(R2.LT.99)GO TO 70
09400	170	JA=98
09500		RETURN
09600	70	IF(POS.EQ.0)POS=200
09700	C  0,0  DOES WHOLE STAFF
09800		IF(INP(1).NE.LAA)GO TO 4
09900	267	IF(IDEV.EQ.1)GO TO 467
10000		CALL TYPSTR(' TYPE P#, CHNG,  P#, CHNG,  P#, CHNG, ...')
10100		CALL TYPCRL
10200	467	READ(IDEV,F78F,END=167)V
10300	CQQ	ACCEPT F78F,V
10400		REREAD FA1,K
10500	C  TYPE 'L' FOR LIGHT PEN
10600		IF(K.EQ.LESS)GO TO 167
10700		CALL LO2UP(K)
10800		IF(K.NE.IGT)GO TO 367
10900		IDEV=1
11000		GO TO 267
11100	367	IF(V(1).EQ.99)GO TO 7
11200		IF(K.EQ.LBB)GO TO 7
11300	C TYPE 'B' OR 99 TO BACKUP
11400		IF(K.NE.LEL)GO TO 66
11500		DO 67 K=1,2
11600		V(2)=RY
11700		CALL LPEN(V(1),RY,RX)
11800		REREAD FA1,JA
11900		CALL LO2UP(JA)
12000		IF(JA.EQ.LBB)GO TO 7
12100	67	IF(V(1).GE.99)GO TO 7
12200		V(3)=RY
12300	66	JA=0
12400		IZ=0
12500	C  COUNTER
12600		GO TO 14
12700	167	IDEV=5
12800		GO TO 267
12900	4	JA=98
13000	C  FOR DELETIONS
13100	C  STF.N, -99    -- DELETES ALL BUT STAFF N.
13200		IF(Z.NE.-99)GO TO 14
13300		RSTF=R2
13400		R2=99
13500	14	NX=0
13600	C  LOOP STARTS HERE
13700		J=0
13800	140	NX=NX+1
13900	142	JY=PWDS(NX)
14000		RB=RN(JY+3)
14100		IF(RTLINE(JY))GO TO 6
14200		IF(RB.LT.Z)GO TO 6
14300		IF(RB.GT.POS)GO TO 6
14400		IF(RN(JY+2).EQ.RSTF)GO TO 6
14500	C  FOR -99 DELETES.
14600		RB=RN(JY+1)
14700		IF(V(1).EQ.12)GO TO 77
14800		IF(V(1).EQ.100)GO TO 341
14900	C USE P100 AND ANY CODE# TO CREATE CUES. I.E. MINI NOTES, RESTS, BEAMS.
15000		IF(RC.EQ.999)GO TO 143
15100	C  USE P12 TO INVERT STEM, BEAM AND SLURS ALL AT ONCE.
15200	C  SET 12 TO 1 WITH CODE 5 TO INVERT SLURS ONLY
15300	77	RC=0
15400		IF(RB.EQ.5)GO TO 141
15500		IF(RB.NE.6)GO TO 143
15600		IF(RX.EQ.1)GO TO 141
15700	143	IF(RB.NE.RX.AND.RX.NE.0)GO TO 6
15800		IF(ASK)GO TO 100
15900		CALL ASKIT
16000		IF(K.EQ.LNN)GO TO 6
16100		IF(K.EQ.LXX)GO TO 19
16200	100	IF(INP(1).EQ.LAA)GO TO 141
16300		IF(J)GO TO 40
16400		J=-1
16500		K=NX
16600	41	IZ=NX
16700		IF(NX.LT.ITEM)GO TO 140
16800	40	IF(NX-IZ.EQ.1)GO TO 41
16900	C  GO BACK FOR MORE - IF IN RIGHT ORDER.
17000	C  RANGE TO DEL. = K→NX
17100	45	J=IZ+1
17200		IA=PWDS(K)
17300		IB=PWDS(J)-IA
17400		JZ=IWDS(K)
17500		J2=IWDS(J)-JZ
17600		J=J-K
17700		ITEM=ITEM-J
17800		DO 42 IZ=K,ITEM+1
17900		PWDS(IZ)=PWDS(IZ+J)-IB
18000	42	IWDS(IZ)=IWDS(IZ+J)-J2
18100		IST2=IST2-J2
18200		I=I-IB
18300		 CALL LOOP(IA,I,1,0,IB,RN)
18400		CALL LOOP(JZ+2,IST2+2,1,0,J2,IST)
18500		IF(K.GE.ITEM)GO TO 1
18600	C  EXITS
18700		NX=K+1
18800		GO TO 142
18900	341	IF(RB.EQ.6)GO TO 141
19000		IF(RB.GT.2)GO TO 6
19100	141	IF(IZ.GE.97)GO TO 9
19200	C   THERE'S A LIMIT TO THE R ARRAY    4/18/73
19300		IZ=IZ+1
19400	C  FOUND AN ITEM
19500		R(1,IZ)=223
19600	C 223 IS CODE NUMB. FOR EDIT MODE 
19700		R(2,IZ)=NX
19800	10	IZ=IZ+1
19900		DO 101 KV=3,10
20000	101	R(KV,IZ)=0
20100		IF(V(1).NE.100)GO TO 131
20200	231	R(1,IZ)=400
20300	C  MAKES MINI NOTES, RESTS, BEAMS
20400		R(2,IZ)=100
20500		GO TO 6
20600	131	IF(RC.EQ.999)GO TO 11
20700		IF(RB.EQ.1)GO TO 30
20800	31	RC=RN(JY+7)
20900		IF(RB.EQ.6)GO TO 32
21000	C  NEXT INVERTS DIP
21100		IF(RX.EQ.1)GO TO 35
21200		A=-1.6
21300		RB=-10
21400		IF(RC)A=-A
21500	CC***????  WHY CHANGE P2???  ****36	R(7,IZ)=2
21600	CC***	R(8,IZ)=RN(JY+2)+A
21700		GO TO 37
21800	35	RB=-4
21900		IF(RN(JY+8).LT.-1)RB=-1.4
22000	C  2 AND .7 ARE HGTS SET IN 'BEAMS'
22100	37	IF(RC)RB=-RB
22200		R(3,IZ)=4
22300		R(4,IZ)=RN(JY+4)+RB
22400		R(6,IZ)=RN(JY+5)+RB
22500		R(5,IZ)=5
22600	33	R(1,IZ)=7
22700		R(2,IZ)=-RC
22800		GO TO 6
22900	32	IF(RC.LT.20)GO TO 34
23000	C  THIS IS FOR BEAMS
23100	232	RC=10-RC
23200		GO TO 33
23300	132	IF(RC.GT.-20)GO TO 232
23400		GO TO 332
23500	34	IF(RC)GO TO 132
23600	C  P7 IS NEG FOR TREMOLOS
23700	332	RC=-10-RC
23800		GO TO 33
23900	
24000	C  NEXT INVERTS STEMS EITHER WAY. USE ANY #>11 WITH CODE 1 TO INVERT.
24100	C  MUST! BE FIRST IN LIST!!!
24200	C	RC=0
24300	30	RB=RN(JY+5)
24400		IF(RB.LT.10)GO TO 12
24500	C  NO STEM < 10
24600		RC=10
24700		IF(RB.GE.20)RC=-RC
24800		RB=RB+RC
24900	12	V(1)=5.
25000		V(2)=RB
25100	C  SO IT WILL DISPLAY RESULT
25200	11	DO 8 K=1,10
25300	8	R(K,IZ)=V(K)
25400	6	IF(J)GO TO 45
25500		IF(NX.LT.ITEM)GO TO 140
25600	19	IF(INP(1).NE.LAA)GO TO 1
25700	9	R(1,IZ+1)=222
25800		R(1,IZ+2)=0
25900	CC	REND=-1.
26000	1	CALL HYDPOG(3)
26100		END
26200	
26300		SUBROUTINE LPEN(A,B,C)
26400		COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK /SIZ/RSZ,JCEN,KCEN
26500		COMMON /POSI/STFF(0/7),JJ2,POS /ALF/INP(71),M,L /C/MM,LL
26600		COMMON /A2Z/LAA,LBB,NONO(21),LXX
26700		M=MM
26800		L=LL
26900		IF(IABS(M).GT.512)GO TO 4
27000		IF(IABS(L).LE.512)GO TO 3
27100	4	M=0
27200		L=100
27300	3	CALL SETCUR(M,L,0)
27400		CALL TYPSTR('TYPE <CR> TO SET POINT')
27500		ACCEPT FA1,JD
27600		IF(JD.EQ.'9')RETURN
27700		IF(JD.EQ.LXX)RETURN
27800	C  TYPE 'B' OR 99 TO BACK UP
27900		IF(JD.EQ.LBB)RETURN
28000		CALL RDCUR(M,L)
28100		L=(L+KCEN)/RSZ
28200	1	B=((M+JCEN)/RSZ+596.0)/5.96
28300	C  B=HORIZ. STEP NUM.
28400		DO 13 K=0,7
28500		M=STFF(K)+60.
28600		IF(L.GT.M)GO TO 13
28700		A=K
28800	C  A=STAFF NUM.
28900		GO TO 8
29000	13	CONTINUE
29100	8	C=IFIX((L-STFF(K)+21.)/7.+.5)
29200	C  FINDS VERT. NOTE NUM.
29300		TYPE F78F,A,B
29400		END
29500	
29600	
29700		SUBROUTINE SAVIT
29800		IMPLICIT INTEGER(A-Q,S-Z)
29900		COMMON/FRMT/F78F(1),FA1(1),FA5(1),ASK/DL/X22,SAVER,NAME,EXT
30000		1 /POSI/STFF(0/7),JJ2,IPOS /LIMIT/LIMIT,ITEM,L,I,IX 
30100		1 /SCM/V(78),ISCR,LCNT,IRSTF,LIST(200),REND  /IDEV/IDEV
30200		1 /ALF/INP(72),ML/XRN/RN(1)/DPY/ST(4000),MEDIT,IGO
30300		1 /STF/RSTFAC(0/7),RSTJ2 /PTR/PWDS(1) /JCHAR/IXX,ISEMI,IBLA
30400		COMMON R2,JA,CENTR,J2,RJQ(20),JQ(20)
30500		COMMON /A2Z/LAA,LBB,LCC,LDD,NONO(8),LMM,LNN,NON(4),LSS
30600		DIMENSION SV(128)
30700		EQUIVALENCE (INP2,INP(2)),(ST2,ST(2)),(SV,LIST)
30800	C  'SAME' WILL REPEAT CURRENT NAME.  BLANK WILL USE TMP.MS
30900		KX=-1
31000		K=0
31100	32	K=K+1
31200	C  THIS IS TO REPAIR DAMAGE DONE BY UNKNOWN BUGS!!!!
31300	33	L=PWDS(K)
31400		IA=PWDS(K+1)
31500		IB=RN(L)+3.+L
31600	C  THIS SHOULD BE NEW POINTER
31700		IF(IA-IB.EQ.0)GO TO 36
31800		IF(RN(IB)+3+IB.NE.PWDS(K+2))GO TO 38
31900		J=K+1
32000		PWDS(J)=IB
32100		CALL TYPSTR('?FIXED UP ITEM ')
32200		CALL TYPINT(J)
32300		CALL TYPCRL
32400		GO TO 36
32500	38	IJ=IA-L
32600		DO 39 J2=K+1,ITEM
32700	39	PWDS(J2)=PWDS(J2+1)-IJ
32800		CALL TYPSTR('BAD ITEM--')
32900		CALL TYPINT(K)
33000		CALL TYPCRL
33100		IF(KX.EQ.0)GO TO 50
33200		CALL TYPSTR('NAME.EXT? ')
33300		ACCEPT 141,INP
33400		CALL NAMEXT(INP,NAME,EXT)
33500	C  ONLY DOES THIS ON THE FIRST ERROR
33600		GO TO 2
33700	50	J=RJ
33800		KX=0
33900		CALL LOOP(L,I,1,0,J,RN)
34000	C  REARRANGES DATA
34100		I=I-J
34200		ITEM=ITEM-1
34300		IF(ITEM.LE.K)GO TO 37
34400		GO TO 33
34500	C  GO BACK AND TRY AGAIN
34600	36	IF(IA.LE.L)GO TO 38
34700	C  JUMP IF PWDS IS OUT OF ORDER
34800		IF(K.LT.ITEM)GO TO 32
34900	37	KX=-1
35000		IF(SAVER.GE.0)GO TO 10
35100		SAVER=5
35200	101	CALL PUTEXT('TMP','MS ')
35300		GO TO 102
35400	1	FORMAT(I,24F)
35500	2	CALL TYPCHR('WRITE OVER   ',13)
35600		CALL TYPWRD(NAME)
35700		CALL TYPCHR('.',1)
35800		CALL TYPCHR(EXT,3)
35900		CALL TYPCHR('?  ',3)
36000		ACCEPT 141,INP
36100		CALL LULOOP
36200		IF(INP(1).NE.LNN)GO TO 4
36300	10	IF(INP2.EQ.LMM)GO TO 4
36400	11	L=NAME
36500		INP(1)=-1
36600		CALL NAMEXT(INP,NAME,EXT)
36700		IF(NAME.NE.IBLA)GO TO 40
36800		CALL TYPSTR('NAME.EXT? ')
36900		ACCEPT 141,INP   
37000		CALL NAMEXT(INP,NAME,EXT)
37100		IF(NAME.EQ.IBLA)GO TO 4
37200	C 99 WILL BACK UP.
37300		IF(NAME.NE.'99')GO TO 40
37400		NAME=L
37500		RETURN
37600	40	IF(NAME.NE.'SAME')GO TO 43
37700		NAME=L
37800		GO TO 4
37900	141	FORMAT(72A1)
38000	43	IF(LOOKX(NAME,EXT))GO TO 2
38100	C  JUMP BACK IF FILE NAME ALREADY ON DSK
38150		IF(IDEV.NE.1)GO TO 4
38170		CALL TYPWRD(NAME)
38180		CALL TYPCHR('.',1)
38190		CALL TYPCHR(EXT,3)
38195		CALL TYPCRL
38200	4	IF(KX.EQ.0)GO TO 50
38300		IF(NAME.NE.IBLA)GO TO 41
38400		NAME=L
38500		GO TO 101
38600	41	CALL PUTEXT(NAME,EXT)
38700	42	IF(INP2.EQ.LDD)GO TO 202
38800	C   SB=SAVE BIG;  SD=SAVE DPY ONLY; SM=SB WITH SAME NAME
38900	102	IRSTF=0
39000		IF(INP2.EQ.LBB)IRSTF=-1
39100		JJ2=ITEM+2
39200		IPOS=I
39300	C WD CNTS
39400		CALL EXTOUT(RSTFAC,128)
39500	C  INCLUDES STFF AND V ARRAYS
39600	C***	CALL EXTOUT(PWDS,JJ2)
39700		CALL EXTOUT(RN,IPOS)
39800		IF(LCNT.GT.1)CALL EXTOUT(LIST,LCNT)
39900	CC102	WRITE(21)ITEM,I
40000	CC	1,(PWDS(L),L=1,ITEM+1),(RN(L),L=1,I-1),ISCR,(V(L),L=1,ISCR),
40100	CC	1 LCNT,(LIST(L),L=1,LCNT),RSTFAC,STFF,SV
40200	C (SV) FOR FORTRAN READ BUG!!!!
40300	CC	IF(SAVER.GE.0)WRITE(21)RSTFAC,STFF,L
40400	C NOT USED WHEN SAVE IS AUTOMATIC.
40500	C  TAKE OUT ABOVE WHEN BUG IS SOMEDAY FIXED IN F4.
40600		IF(I.LE.LIMIT)GO TO 20
40700		CALL TYPSTR('****** TOO MUCH DATA TO PRINT - ')
40800		CALL TYPINT(I)
40900		CALL TYPCHR('/',1)
41000		CALL TYPINT(LIMIT)
41100	20	IF(INP2.EQ.LBB)CALL EXTOUT(ST,4302)
41200	1001	CALL FINEXT
41300		IF(INP(1).NE.LSS)RETURN
41400		IF(NAME.NE.IBLA)RETURN
41500		CALL TYPSTR('DISPLAY SAVED IN "TMP.MS"')
41600		CALL TYPCRL
41700	C   GO BACK IF THE SAVER WROTE THE FILE
41800		RETURN
41900	202	WRITE(21),ST2,(ST(L),L=1,ST2+2)
42000	 	GO TO 1001
42100	C   WRITES DPY BUFFER ONLY.
42200		END
42300	
42400		SUBROUTINE LISTP(LST)
42500		IMPLICIT INTEGER(A-Q,S-Z)
42600		DIMENSION LST(1)
42700		COMMON/SCM/V(78),ISCR,LCNT,RSTF,LIST(200),REND/ALF/I1,I2,I3
42800		COMMON R2,JA,CENTR,J2,RJQ(20),JQ(16),K,JY,X,Y /XRN/RN(1)
42900		1 /STF/RSTFAC(0/7),RSTJ2 /LIMIT/LIMIT,ITEM,L,I,IX /PTR/PWDS(1)
43000		EQUIVALENCE (JC,JQ(1)),(JD,JQ(2)),(RJC,RJQ(1)),(RJD,RJQ(2))
43100		1 ,(RJE,RJQ(3))
43200	
43600		JY=5
43700		IF(RJE.NE.0)JY=3
43800	CC	JD=RJD
43900	C  NO LPT FOR NOW    CC	IF(JD.NE.0)JY=3
44000	CC	DO 6334 L=IFIX(R2),JC
44100		JD=RJD
44200		IF(RJC.NE.0)GO TO 1
44300		RJC=1.
44400		JD=ITEM
44500	1	DO 6334 L=IFIX(RJC),JD
44600		X=PWDS(L)
44700		Y=RN(X)+2+X
44800		X=X+1
44900		K=RN(X)
44910		IF(I3.NE.'X')GO TO 2
44920	C TYPE 'PRX' TO CREATE 'READ' FILE WITH ALL PARAMS.
44930		WRITE(22,3)(RN(K),K=X,Y)
44940		GO TO 6334
44950	3	FORMAT(F4.0,F3.0,3F9.3,4F13.3,3F9.3)
44960	C* NOTICE -- WRITES LINES WHICH ARE TOO LONG! - THEY MUST BE EDITED.
44970	2	WRITE(JY,6333),L,LST(K),(RN(K),K=X,Y)
45000	6334	CONTINUE
45100	C  P, N1, N2, N3  TYPES ITEM LIST. N1=1ST, N2=LAST, N3=TO LPT?
45200	C  LEAVE THIS HERE SO WRITE(JY, OF R IS POSSIBLE IN DDT
45300	6333	FORMAT(I4,') ',A5,2F4.0,F8.3,F8.2,7F10.2)
45305		IF(I3.NE.'X')RETURN
45310		END FILE 22
45320	C WRITES 'FOR22.DAT'
45340		CALL TYPSTR('PARAMS WRITTEN ON FOR22.DAT')
45360		CALL TYPCRL
45400		END